﻿#pragma once

#include <QObject>
#include <Global.h>
#include "ServicesExport.h"

namespace Domy {

/**
 * @brief The MessageServices class
 * @note  消息服务类
 */
class SERVICES_EXPORT MessageServices : public QObject
{
    Q_OBJECT
    explicit MessageServices(QObject *parent = Q_NULLPTR);
public:
    ~MessageServices();

#define domy_msg Domy::MessageServices::getServices()
    static MessageServices *getServices();

    /**
     * @brief showStatus
     * @note  显示状态消息
     * @param text    状态文本
     * @param timeout 显示超时
     */
    void showStatus(const QString &text, int timeout = 3000);

    /**
     * @brief appendMessage
     * @note  追加消息
     * @param type 消息类型
     * @param msg  消息文本
     */
    void appendMessage(MessageType type, const QString &msg);

    /**
     * @brief appendMessages
     * @note  追加消息
     * @param type     消息类型
     * @param msg_list 消息文本列表
     */
    void appendMessages(MessageType type, const QStringList &msg_list);

    /**
     * @brief appendIssues
     * @note  追加问题
     * @param type      问题类型
     * @param file_name 文件路径
     * @param line      行号
     * @param text      问题文本
     */
    /**
     * @brief appendIssues
     * @note  追加问题
     * @param issues 问题
     */
    void appendIssues(const Issues &issues);

signals:
    /**
     * @brief signalShowStatus
     * @note  信号：显示状态信息
     * @param msg     状态消息
     * @param timeout 显示超时
     */
    void signalShowStatus(const QString &msg, int timeout);

    /**
     * @brief signalAppendMessage
     * @note  信号：追加消息
     * @param msg
     */
    void signalAppendMessage(MessageType type, const QStringList &msg_list);

    /**
     * @brief signalAppendIssues
     * @note  追加问题
     * @param issues 问题
     */
    void signalAppendIssues(const Issues &issues);
};

} // namespace Domy
